package com.smile.utils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 日期和时间工具类
 * 
 * @author 曾迎颖
 * @date 2016年5月11日 上午10:54:00
 * 
 */
public class DateTimeTool {

	/**
	 * 判断一个字符串是不是一个合法的日期格式
	 * 
	 * @Title: isValidDate
	 * @return: boolean
	 */
	public static boolean isValidDate(String strDate, String pattern) {
		// 指定日期格式
		SimpleDateFormat format = new SimpleDateFormat(pattern);
		try {
			// 设置lenient为false.
			// 否则SimpleDateFormat会比较宽松地验证日期，比如2007/02/29会被接受，并转换成2007/03/01
			format.setLenient(false);
			format.parse(strDate);

			return true;
		} catch (Exception e) {
			return false;
		}
	}

	/**
	 * 获取当前日期
	 * 
	 * @return
	 */
	public static String getCurrentDate() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		return sdf.format(new Date());
	}

	/**
	 * 获取当前日期，时间格式为yyyy-MM-dd HH:mm:ss
	 * 
	 * @return
	 */
	public static String getCurrentTime() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return sdf.format(new Date());
	}

	/**
	 * 获取当前时间，时间格式为yyyy-MM-dd HH:mm:ss SSS
	 * 
	 * @return
	 */
	public static String getCurrentTimeMillis() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
		return sdf.format(new Date());
	}

	/**
	 * 获取当前时间，需指定时间格式
	 * 
	 * @param pattern
	 * @return
	 */
	public static String getCurrentTime(String pattern) {
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		return sdf.format(new Date());
	}

	/**
	 * 将日期格式化成时间，时间格式为yyyy-MM-dd HH:mm:ss
	 * 
	 * @param date
	 * @return
	 */
	public static String formatTime(Date date) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return sdf.format(date);
	}

	/**
	 * 将日期格式化成时间
	 * @param date
	 * @param pattern
	 * @return
	 */
	public static String formatTime(Date date, String pattern) {
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		return sdf.format(date);
	}

	/**
	 * 将字符串时间转成Date，时间格式为yyyy-MM-dd HH:mm:ss
	 * 
	 * @param string
	 * @return
	 */
	public static Date parseDate(String string) {
		SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		if (!StringTool.isEmpty(string)) {
			try {
				return sd.parse(string);
			} catch (ParseException e) {
				e.printStackTrace();
			}
		}
		return null;
	}

	/**
	 * 将字符串时间转成Date，需指定时间格式
	 * 
	 * @Title: parsetDate
	 * @return: Date
	 */
	public static Date parsetDate(String strDate, String pattern) {

		SimpleDateFormat format = new SimpleDateFormat(pattern);
		try {
			return format.parse(strDate);
		} catch (Exception e) {
			return null;
		}

	}
	
	/**
	 * 日期相减 单位(s)
	 * @param start
	 * @param end
	 * @return
	 */
	public static long compareDate(String start,String end){
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
		long diff = 0;
	    try  
	    {  
	      Date s = df.parse(start);  
	      Date e = df.parse(end);  
	      diff = e.getTime() - s.getTime();//这样得到的差值是微秒级别  
	    }catch (Exception e1)  
	    {  
	    }
	    return diff/1000;
	}

}
